import { EzFormValidatorFn } from '../../utils';

/**
 * 表单控件对象接口
 */
export interface EzFormControl<T = any> {
  /**
   * 判断表单控件是否被禁用
   */
  isDisabled(): boolean;

  /**
   * 判断表单控件是否启用
   */
  isEnabled(): boolean;

  /**
   * 判断表单控件校验通过
   */
  isValid(): boolean;

  /**
   * 启用表单控件
   */
  enable(): void;

  /**
   * 禁用表单控件
   */
  disable(): void;

  /**
   * 设置表单控件值
   * @param value 值
   */
  setValue(value: T): void;

  /**
   * 获取表单控件值
   */
  getValue(): T;

  /**
   * 校验表单控件
   */
  validate(): void;

  /**
   * 标记表单控件为必输（只是展示）
   */
  markAsRequired(): void;

  /**
   * 标记表单控件为非必输（只是展示）
   */
  markAsNotRequired(): void;

  /**
   * 设置表单控件校验函数
   * @param validators 校验函数
   */
  setValidators(validators: EzFormValidatorFn[]): void;

  /**
   * 隐藏表单控件
   */
  hide(): void;

  /**
   * 展示表单控件
   */
  show(): void;

  /**
   * 判断表单控件是否可见
   */
  isVisible(): boolean;
}
